package cn.wdm.ymcc.web.controller;

import cn.wdm.ymcc.domain.PayOrder;
import cn.wdm.ymcc.dto.AlipayNotifyDto;
import cn.wdm.ymcc.dto.ToScanCodeViewDto;
import cn.wdm.ymcc.result.JSONResult;
import cn.wdm.ymcc.service.IPayService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import javax.validation.Valid;

@RestController
@RequestMapping(("/pay"))
public class PayController {
    @Autowired
    private IPayService payService;

    /**
     * 检查支付单是否生成，保证支付单生成，才去调用支付服务
     * @param orderNo 订单号
     */
    @GetMapping("/checkPayOrder/{orderNo}")
    public JSONResult checkPayOrder(@PathVariable("orderNo") String orderNo){
        PayOrder payOrder=payService.checkPayOrder(orderNo);
        return payOrder!=null?JSONResult.success(payOrder):JSONResult.error();
    }

    /**
     * 浏览器请求pay微服务发起支付的请求，为客人展示支付宝扫码的界面
     * @param dto 发起支付请求必要的参数
     * @return
     */
    @PostMapping("/apply")
    public JSONResult openScanCodeView(@RequestBody @Valid ToScanCodeViewDto dto){
        //formHtml 扫码界面的form界面
        String formHtml=payService.openScanCodeView(dto);
        return JSONResult.success(formHtml);
    }

    /**
     *  如果返回success给支付宝，那么支付宝不再通知你了
     *  如果返回的是非success，那么支付宝会一直尝试通知您，直到8次通知
     * @return
     */
    @RequestMapping("/alipay/notify")
    public String asynNotify(AlipayNotifyDto dto){
        try {
            System.out.println("走回调通知-----------------------");
            return payService.asynNotify(dto);
        } catch (Exception e) {
            e.printStackTrace();
            return "Fail";
        }
    }
}
